package reflect;

import java.lang.reflect.Method;
import java.util.Locale;
import java.util.Scanner;

/**
 * java反射机制
 * 反射机制是java的动态机制，可以在程序“运行期间”再确定实例化对象，方法调用，属性操作等
 * 反射机制可以提高代码的灵活度，但是会带来较多的系统开销和较低的运行效率
 */
public class ReflectDemo1 {
    public static void main(String[] args) throws ClassNotFoundException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入要加载的类的名字:");
        String className = scan.nextLine();
        Class cls = Class.forName(className);

        //获取String的类对象
        String name = cls.getName();//获取完全限定名：包名.类名
        System.out.println(name);

        name = cls.getSimpleName();//仅获取类名
        System.out.println(name);

        String packageName = cls.getPackage().getName();
        System.out.println("包名:" + packageName);

        //获取String类的所有公开方法(包含从超类继承的方法)
//        Method[] methods = cls.getMethods();
        //获取本类自己定义的方法(包含私有方法)
        Method[] methods = cls.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println(method.getName());
        }
    }
}
